package view;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EtchedBorder;
import javax.swing.table.DefaultTableModel;

import Algorithm.Algoritimo;
import Algorithm.Algoritimo1;
import model.Homem;
import model.Mulher;
import model.Resultado;
import pesistencia.AcessoBanco;

public class TelaInicial {

	private JFrame frame;
	private JTable table_homem;
	private JTable table_mulher;
	private JTable table_resultado;
	private static int count=0; 

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TelaInicial window = new TelaInicial();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public TelaInicial() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 853, 701);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JButton btnBlockNestedLoopJoin = new JButton("Block Nested-Loop Join");
		btnBlockNestedLoopJoin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				DefaultTableModel modelresultado = (DefaultTableModel) table_resultado.getModel();
				Algoritimo1 a = new Algoritimo1();
				ArrayList<Resultado> r = a.blockNestedLoopJoin(3);
				for(int i=0;i<r.size();i++){
					//for(int j=0;j<3;j++){
						modelresultado.addRow(new Object[] {
								r.get(i).getIdhomempk(),
								r.get(i).getNomehomem(),
								r.get(i).getIdhomemfk(),
								r.get(i).getNomemulher()
								}
						);
				}
			}
		});
		
		JButton btnMergeJoin = new JButton("Merge Join");
		btnMergeJoin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				DefaultTableModel modelresultado = (DefaultTableModel) table_resultado.getModel();
				Algoritimo1 a = new Algoritimo1();
				ArrayList<Resultado> r = a.mergeJoin(3);
				for(int i=0;i<r.size();i++){
					//for(int j=0;j<3;j++){
						modelresultado.addRow(new Object[] {
								r.get(i).getIdhomempk(),
								r.get(i).getNomehomem(),
								r.get(i).getIdhomemfk(),
								r.get(i).getNomemulher()
								}
						);
				}
			}
		});
		
		JButton btnHashJoin = new JButton("Hash Join");
		btnHashJoin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		
		JScrollPane panelTabelaHomem = new JScrollPane();
		panelTabelaHomem.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.RED, null));
		
		JScrollPane panelTabelaMulher = new JScrollPane();
		panelTabelaMulher.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.RED, null));
		
		JScrollPane panelResultado = new JScrollPane();
		panelResultado.setBorder(new EtchedBorder(EtchedBorder.LOWERED, Color.GREEN, null));
		
		JLabel lblTabela_Homem = new JLabel("Homens");
		
		JLabel lblTabela_Mulher = new JLabel("Mulheres");
		
		JLabel lblResultado = new JLabel("Resultado");
	
		DefaultTableModel tabela_resultado = new DefaultTableModel(new Object [] {"IdhomemPK","NomeHomem","NomeMulher","IdhomemFK"},0);
		table_resultado = new JTable(tabela_resultado);
		panelResultado.setViewportView(table_resultado);
		
		DefaultTableModel tabela_mulher = new DefaultTableModel(new Object [] {"idmulher","Nome","Telefone","Homepage","Idhomem"},0);
		table_mulher = new JTable(tabela_mulher);
		panelTabelaMulher.setViewportView(table_mulher);
		
		DefaultTableModel tabela_homem = new DefaultTableModel(new Object [] {"Idhomem","Nome","Telefone","Homepage"},0);
		table_homem = new JTable(tabela_homem);
		panelTabelaHomem.setViewportView(table_homem);
		
		JButton btnCarregar = new JButton("Carregar");
		btnCarregar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//int count =0;
				if(count==0){
				AcessoBanco ab = new AcessoBanco();
				DefaultTableModel modelhomem = (DefaultTableModel) table_homem.getModel();
				DefaultTableModel modelmulher = (DefaultTableModel) table_mulher.getModel();
				ArrayList<Homem> tabela_homem = ab.carregarTabelaHomem();
				ArrayList<Mulher> tabela_mulher = ab.carregarTabelaMulher();										
							for (Homem homem : tabela_homem) {
								modelhomem.addRow(new Object[] {homem.getIdhomem(),homem.getName(),homem.getTelefone(),homem.getHompage()});
							
							}
							for(Mulher mulher : tabela_mulher){
								modelmulher.addRow(new Object[] {mulher.getIdmulher(),mulher.getName(),mulher.getTelefone(),mulher.getHompage(),mulher.getIdhomem()});
							}
				};
			count+=1;
			
			}
		});
		GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(10)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(panelResultado, GroupLayout.DEFAULT_SIZE, 817, Short.MAX_VALUE)
							.addContainerGap())
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(btnBlockNestedLoopJoin)
							.addGap(6)
							.addComponent(btnMergeJoin)
							.addGap(6)
							.addComponent(btnHashJoin)
							.addPreferredGap(ComponentPlacement.RELATED, 423, Short.MAX_VALUE)
							.addComponent(btnCarregar)
							.addContainerGap())
						.addComponent(lblResultado)
						.addGroup(groupLayout.createSequentialGroup()
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(lblTabela_Homem)
								.addComponent(panelTabelaHomem, GroupLayout.PREFERRED_SIZE, 392, GroupLayout.PREFERRED_SIZE))
							.addPreferredGap(ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(panelTabelaMulher, GroupLayout.PREFERRED_SIZE, 399, GroupLayout.PREFERRED_SIZE)
								.addComponent(lblTabela_Mulher))
							.addContainerGap())))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(11)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(btnBlockNestedLoopJoin)
						.addComponent(btnMergeJoin)
						.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
							.addComponent(btnHashJoin)
							.addComponent(btnCarregar)))
					.addGap(2)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblTabela_Homem)
						.addComponent(lblTabela_Mulher))
					.addGap(2)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(panelTabelaHomem, GroupLayout.PREFERRED_SIZE, 258, GroupLayout.PREFERRED_SIZE)
							.addGap(4)
							.addComponent(lblResultado))
						.addComponent(panelTabelaMulher, GroupLayout.PREFERRED_SIZE, 258, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(panelResultado, GroupLayout.PREFERRED_SIZE, 285, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(43, Short.MAX_VALUE))
		);
		
		
		
		
		frame.getContentPane().setLayout(groupLayout);
		
	}
}
